package pointer

import "fmt"

func modify1(x int)  {
	x=100
}
func modify2(x *int)  {
	*x=100
}

func init()  {

	a:=10
	b:=&a
	fmt.Printf("a:%d ptr:%p\n",a,&a)
	fmt.Printf("b:%p type:%T\n",b,b)
	fmt.Println(&b)
	c:=*b
	fmt.Printf("type of c:%T\n",c)
	fmt.Printf("value of c:%v\n",c)

	modify1(a)
	fmt.Println(a)
	modify2(&a)
	fmt.Println(a)

	//值类型的声明不需要分配内存空间
	//但是引用类型的变量，是需要用new和make来分配内存
	//new函数得到的是一个类型的指针
	a1:=new(int)
	b1:=new(bool)
	fmt.Printf("%T\n", a1)
	fmt.Printf("%T\n", b1)
	fmt.Println(*a1)
	fmt.Println(*b1)
	//make函数
	var b2 map[string]int
	b2 = make(map[string]int,10)
	b2["测试"]=100
	fmt.Println(b2)


	fmt.Println("--------------------")
}
